import 'dart:io';

import 'package:flutter/material.dart';
import 'package:ideology/features/screens/widgets/editor_menu_bar/setting/header/build_header.dart';
import 'package:ideology/features/screens/widgets/editor_menu_bar/setting/left/build_left_pane.dart';
import 'package:ideology/features/screens/widgets/editor_menu_bar/setting/right/build_right_pane.dart';
import 'package:ideology/features/screens/widgets/editor_menu_bar/setting/sdk_settings_controller.dart';
import 'package:ideology/features/screens/widgets/editor_menu_bar/setting/utils/show_snack.dart';
import 'package:ideology/features/screens/widgets/editor_menu_bar/setting/utils/thin_divider.dart';

/// 一个展示和配置 SDK 的设置对话框。
///
/// - 左侧面板：[BuildLeftPane] 提供 SDK 的选择、安装、移除操作；
/// - 右侧面板：[BuildRightPane] 展示详情与状态；
/// - 头部和底部分别由 [buildHeader] 与 [thinDivider] 组成。
///
/// 该对话框内部维护一个 [SdkSettingsController]，
/// 用于驱动 UI 状态刷新（下载进度、当前 SDK、错误提示等）。
class SdkSettingsDialog extends StatefulWidget {
  /// 创建一个 [SdkSettingsDialog]。
  ///
  /// - [initial] 初始 SDK 设置（可选，用于持久化恢复）；
  /// - [releases] 可用的 SDK 发布列表；
  /// - [defaultInstallDir] 默认安装根目录；
  /// - [sdkDirValidator] SDK 目录校验器（可选）。
  const SdkSettingsDialog({
    super.key,
    this.initial,
    this.releases,
    this.defaultInstallDir,
    this.sdkDirValidator,
  });

  /// 初始的 SDK 设置（可能从持久化恢复得到）。
  final SdkSettings? initial;

  /// 可供选择的 SDK 发布列表。
  final List<SdkRelease>? releases;

  /// 默认安装根目录。
  final Directory? defaultInstallDir;

  /// SDK 目录有效性校验器。
  final Future<bool> Function(Directory dir)? sdkDirValidator;

  @override
  State<SdkSettingsDialog> createState() => _SdkSettingsDialogState();
}

/// [SdkSettingsDialog] 的状态类。
///
/// 内部构造并持有一个 [SdkSettingsController]，
/// 通过监听其变化来刷新 UI。
class _SdkSettingsDialogState extends State<SdkSettingsDialog> {
  /// 控制器，管理 SDK 设置的业务逻辑与状态。
  late final SdkSettingsController controller;

  @override
  void initState() {
    super.initState();
    controller = SdkSettingsController(
      // 若未传入 releases
      releases: widget.releases ??
          [
            SdkRelease(
              version: '0.7.0',
              url: Uri.parse(
                'https://gitee.com/jcnc-org/snow/releases/download/v0.7.0/Snow-v0.7.0-Windows-x64.zip',
              ),
            ),
          ],
      defaultInstallDir: widget.defaultInstallDir,
      sdkDirValidator: widget.sdkDirValidator,
      initial: widget.initial,
    )..addListener(_refresh); // 监听控制器变化，刷新 UI
  }

  @override
  void dispose() {
    controller
      ..removeListener(_refresh) // 移除监听
      ..dispose();
    super.dispose();
  }

  /// 当控制器状态变化时调用，刷新整个 widget。
  void _refresh() => setState(() {});

  @override
  Widget build(BuildContext context) {
    final theme = Theme.of(context);
    final titleStyle = theme.textTheme.titleLarge?.copyWith(
      fontWeight: FontWeight.w600,
    );

    return Dialog(
      insetPadding: const EdgeInsets.symmetric(horizontal: 28, vertical: 28),
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
      child: ConstrainedBox(
        constraints: const BoxConstraints(maxWidth: 760, maxHeight: 560),
        child: DefaultTabController(
          length: 2,
          child: Column(
            children: [
              // -------- Header --------
              buildHeader(context, titleStyle),
              thinDivider(context),

              // -------- Body --------
              Expanded(
                child: Row(
                  children: [
                    // 左侧：SDK 操作列表（安装、选择）
                    BuildLeftPane(controller: controller, onSnack: showSnack),

                    // 右侧：SDK 信息与状态展示
                    BuildRightPane(controller: controller),
                  ],
                ),
              ),

              // -------- Footer --------
              thinDivider(context),
            ],
          ),
        ),
      ),
    );
  }
}
